﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 版权所有 (c) 2022   保留所有权利。
 * CLR版本：4.0.30319.42000
 * 机器名称：DESKTOP-UL84BU5
 * 公司名称：
 * 命名空间：KingerRobot.WanliMDC.SpiService.Services.BaseBussiness
 * 唯一标识：71733530-9c39-4b27-8f00-efab093cfed6
 * 文件名：CrnImpl
 * 当前用户域：DESKTOP-UL84BU5
 * 
 * 创建者：zzl
 * 电子邮箱：1003590782@qq.com
 * 创建时间：2022/6/22 11:22:31
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

namespace KingerRobot.MexicoSailunMDC.SpiService;

internal class CrnImpl : ICrnService
{
    private readonly static IRcsEquipCrn _RcsEquipCrn = new BRcsEquipCrn();
    private readonly static IWcsAsrsCrnInput _WcsAsrsCrnInput = new BWcsAsrsCrnInput();
    private readonly static IWcsAsrsCrnOutPut _WcsAsrsCrnOutPut = new BWcsAsrsCrnOutPut();
    private readonly static IWcsAsrsCrnAbnormalOutPut _WcsAsrsCrnAbnormalOutPut = new BWcsAsrsCrnAbnormalOutPut();
    public int GetForkAB(long forkId)
    {       //10040901
        var crnFork = _RcsEquipCrn.GetCrnForkByFork(forkId);
        if (crnFork is null)
        {
            return (int)EnumForkAB.None;
        }
        if (crnFork.CrnFork1 == forkId)
        {
            return (int)EnumForkAB.ForkB;// 1811，2815
        }
        if (crnFork.CrnFork2 == forkId)
        {
            return (int)EnumForkAB.ForkA;  // 1812，2814
        }
        return (int)EnumForkAB.None;
    }
    public int GetForkABLoc(long forkId, long loc)
    {
        try
        {
           
            var crnFork = _RcsEquipCrn.GetCrnForkByFork(forkId);
            
            if (crnFork is null)
            {
               
                return (int)EnumForkAB.None;
            }
           
            var inputs = _WcsAsrsCrnInput.GetWcsAsrsCrnInputs().Where(t => t.InputLoc1 == loc || t.InputLoc2 == loc).FirstOrDefault();
            if (inputs != null)
            {
                if (crnFork.CrnFork1 == forkId)
                {
                    if (inputs.Direction == ConstFields.DirectionS)
                    {
                        return (int)EnumForkAB.ForkA;// 1811，2815
                    }
                    else
                    {
                        return (int)EnumForkAB.ForkB;// 1811，2815
                    }
                }
                if (crnFork.CrnFork2 == forkId)
                {
                    if (inputs.Direction == ConstFields.DirectionS)
                    {
                        return (int)EnumForkAB.ForkB;// 1811，2815
                    }
                    else
                    {
                        return (int)EnumForkAB.ForkA;// 1811，2815
                    }
                }
            }
            else
            {
                var outputs = _WcsAsrsCrnOutPut.GetWcsAsrsCrnOutputs().Where(t => t.OutputLoc1 == loc || t.OutputLoc2 == loc).FirstOrDefault();
                // WriteLog($"crntest-outputs{outputs.ToJson()}");
                if (outputs != null)
                {
                  
                    if (crnFork.CrnFork1 == forkId)
                    {
                        if (outputs?.Direction == ConstFields.DirectionS)
                        {
                            return (int)EnumForkAB.ForkA;// 1811，2815
                        }
                        else
                        {
                            return (int)EnumForkAB.ForkB;// 1811，2815
                        }
                    }
                    if (crnFork.CrnFork2 == forkId)
                    {
                        if (outputs?.Direction == ConstFields.DirectionS)
                        {
                            return (int)EnumForkAB.ForkB;// 1811，2815
                        }
                        else
                        {
                            return (int)EnumForkAB.ForkA;// 1811，2815
                        }

                    }
                }
                //可能是异常口出库任务
                else
                {

                    var abnormalOutputs = _WcsAsrsCrnAbnormalOutPut.GetWcsAsrsCrnAbnormalOutputs().Where(t => t.OutputLoc1 == loc || t.OutputLoc2 == loc).FirstOrDefault();

                    if (abnormalOutputs != null)
                    {
                        if (crnFork.CrnFork1 == forkId)
                        {
                            if (abnormalOutputs?.Direction == ConstFields.DirectionS)
                            {
                                return (int)EnumForkAB.ForkA;// 1811，2815
                            }
                            else
                            {
                                return (int)EnumForkAB.ForkB;// 1811，2815
                            }
                        }
                        if (crnFork.CrnFork2 == forkId)
                        {
                            if (abnormalOutputs?.Direction == ConstFields.DirectionS)
                            {
                                return (int)EnumForkAB.ForkB;// 1811，2815
                            }
                            else
                            {
                                return (int)EnumForkAB.ForkA;// 1811，2815
                            }

                        }
                    }


                }
            }
        }
        catch (Exception ex)
        {

            WriteLog($"选择AB叉异常{ex.ToString()}", true);
        }
        return (int)EnumForkAB.None;
    }
}

